package de.cms.kff.ctrl;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import de.cms.kff.dao.AutoDao;
import de.cms.kff.dao.DaoException;
import de.cms.kff.dao.VerleihDao;
import de.cms.kff.dao.MitarbeiterDao;
import de.cms.kff.model.Verleih;

@Controller
public class VerleihController {
    private VerleihDao verleihDao = null;
    private MitarbeiterDao mitarbeiterDao = null;
    private AutoDao autoDao = null;
    
    public void setVerleihDao(VerleihDao verleihDao) {
		this.verleihDao = verleihDao;
	}

	public void setMitarbeiterDao(MitarbeiterDao mitarbeiterDao) {
		this.mitarbeiterDao = mitarbeiterDao;
	}

	public void setAutoDao(AutoDao autoDao) {
		this.autoDao = autoDao;
	}

	/**
     * <p>Searches for all {@link Verleih} objects and returns them in a 
     * <code>Collection</code>.</p>
     * 
     * <p>Expected HTTP GET and request '/AlleFahrten.html'.</p>
     */
    @RequestMapping(value="/AlleVerleihe.html", method=RequestMethod.GET)
    public ModelAndView findAll() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Verleihe");
		mv.addObject("message", "Übersicht über alle Ausleihen im Unternehmen.");
		mv.addObject("verleihe", verleihDao.findAllDTO());
		mv.setViewName("list-verleihe");
		return mv;
    }

    
    
    @RequestMapping(value="/AlleVerleihema.html", method=RequestMethod.GET)
    public ModelAndView findAll1() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Verleihe");
		mv.addObject("message", "Übersicht über alle Ausleihen im Unternehmen.");
		mv.addObject("verleihe", verleihDao.findAllDTO());
		mv.setViewName("list-verleihema");
		return mv;
    }
    
    
    
    @RequestMapping(value="/BeginneVerleih.html", method=RequestMethod.GET)
    public ModelAndView beginneFahrt(@RequestParam(required=true) Integer id) {
    	ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Verleih eintragen");
		mv.addObject("message", "Tragen Sie hier den Fahrzeughalter ein.");
		mv.addObject("auto", autoDao.findById(id));
		mv.addObject("mitarbeiterList", mitarbeiterDao.findAll());
		mv.setViewName("edit-verleih");
    	return mv;
    }

    /**
     * <p>Saves a Fahrt.</p>
     * 
     * <p>Expected HTTP POST and request '/SaveFahrt.html'.</p>
     * @return 
     */
    @RequestMapping(value="/SaveVerleih.html", method=RequestMethod.POST)
    public ModelAndView save(@RequestParam(required=true) Integer id, Integer mitarbeiterId, Integer kilometerstand) {
    	try {
			verleihDao.verleihe(id, mitarbeiterId, kilometerstand);
			return new ModelAndView("redirect:AlleVerleihe.html");
		} catch (DaoException e) {
			ModelAndView mv = new ModelAndView("error");
			mv.addObject("message", e.getMessage());
			return mv;
		}
    }

	/**
     * <p>Searches for {@link Verleih} objects that are not yet terminated and returns them in a 
     * <code>Collection</code>.</p>
     * 
     * <p>Expected HTTP GET and request '/AktuelleFahrten.html'.</p>
     */
    @RequestMapping(value="/AktuelleVerleihe.html", method=RequestMethod.GET)
    public ModelAndView findAktuelle() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Aktuelle Verleihe");
		mv.addObject("message", "Alle Verleihe die noch nicht beendet sind. Klicken Sie auf das entsprechende Auto um die Ausleihe zu beenden.");
		mv.addObject("verleihe", verleihDao.findNichtBeendetDTO());
		mv.setViewName("list-verleihe");
		return mv;
    }

    /**
     * <p>Terminates a Fahrt.</p>
     * 
     * <p>Expected HTTP POST and request '/StopFahrt.html?id=5'.</p>
     * @return 
     */
    @RequestMapping(value="/StopVerleih.html", method=RequestMethod.GET)
    public String save(@RequestParam(required=true) Integer id) {
    	verleihDao.rueckgeben(id);
        return "redirect:AktuelleVerleihe.html";
    }

}
